home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_tripwire.idb / usr / freeware / lib / tripwire / twdb_newinode.pl.z / twdb_newinode.pl
Encoding:
Perl Script  |  1999-04-16  |  1.9 KB  |  68 lines

  1. #!/usr/local/bin/perl
  2.  
  3. ##
  4. ## From tripwire.h
  5. ##
  6. ## /* database record format */
  7. ## /* filename: (entrynumber, ignorevec, st_mode, st_ino, st_nlink,
  8. ## *              st_uid, st_gid, st_size,
  9. ## *              ltob64(statbuf->st_atime, vec64_a),
  10. ## *              ltob64(statbuf->st_mtime, vec64_m),
  11. ## *              ltob64(statbuf->st_ctime, vec64_c), sig0, sig1, ..., sig9
  12. ## */
  13.  
  14. $usage = "usage: $0 <tw.db_hostname>";
  15.  
  16. @ARGV > 1 && die $usage;        # only one argument allowed
  17. ($Database = $ARGV[0]) || die $usage;    # get name of db file
  18. $Back = $Database . ".BAK";
  19. die "Will not clobber existing $Back (saved backup version).\n" 
  20.     if -e $Back;
  21.  
  22. #  Now, we create the backup file.  We do this in stages.  The first
  23. #  stage involves linking the current file to the backup.  We then
  24. #  create a temp file to hold the output.  Finally, when we are all
  25. #  done, we unlink the original name and move the temporary to the
  26. #  old name.
  27.  
  28. $Database =~ m#^(.+)/[^/]+$#;
  29. $Temp = ($1 ? $1 : "./") . "tw.db_TEMP";
  30. umask(077);
  31. link ($Database, $Back) 
  32.     || die "Failed to link $Database to $Back: $!";
  33. open (TMPFD, ">$Temp") 
  34.     || die "Failed to open temporary file $Temp: $!";
  35.  
  36.  
  37. while (<>) {
  38.     m/^@@dbaseversion\s+(\d+)/ && do {
  39.     next if $1 == 4;
  40.     unlink($Temp, $Back);
  41.     die "$Database is version $1, and I only know how to update version 4!";
  42.     };
  43.     next if (/^(#|@@)/);
  44.  
  45.     @line = split(' ', $_, 6);
  46.  
  47.     $line[0] =~ s/#/\\#/g;
  48.     $junk = $line[0];
  49.     eval "\$file = qq#$junk#";       # expands \ddd form
  50.     $st_ino = (lstat($file))[1];
  51.  
  52.     if ($st_ino) {
  53.         $_ = join(' ', (@line[0..3], $st_ino, @line[5]));
  54.     } else {
  55.         warn "$file: lstat() failed: $!  skipping...\n";
  56.     }
  57. } continue {
  58.     print TMPFD $_;
  59. }
  60.  
  61. close TMPFD;
  62.  
  63. unlink($Database) 
  64.     || warn "Failed to unlink old database file $Database: $!";
  65. rename($Temp, $Database)
  66.     || die "Failed to rename temporary file $Temp to $Database: $!";
  67.  
  68.